import axios from 'axios'
import { ElMessage } from 'element-plus'
import {ElLoading} from 'element-plus'
import store from '@/store'
import router from '@/router'
// npm run dev  =》 development
// npm run build  =》 production
// 检查环境是否开发环境
const isDev = process.env.NODE_ENV === 'development'
const devBaseURL = 'http://10.31.155.245:3000/admin'
const proBaseURL = 'http://10.31.155.245:3000/admin'

// 创建axios实例
const request = axios.create({
  baseURL: isDev ? devBaseURL : proBaseURL,
  timeout: 60000, // 请求超时
})

// 请求拦截器
let loading;
request.interceptors.request.use(
  (config) => {
        // 在发送请求之前做些什么
        loading = ElLoading.service({
          lock: true,
          text: '加载中...',
          background: 'rgba(0, 0, 0, 0.7)',
      })
  
    // 添加token
    // console.log(store.state.userInfo.token);
    config.headers.token = store.state.userInfo.token
    return config
  },
  (err) => {
    // 响应失败
    // 超出 2xx 范围的状态码都会触发该函数。
    // 对响应错误做点什么
    return Promise.reject(err)
  },
)

// 响应拦截器
request.interceptors.response.use(
  (res) => {
    // 响应成功
    loading.close()
    // console.log(res);
    
    if(res.data.code=='10119'){
      router.replace('/login')

    }
    // console.log(res);
    if(res.data.code!=200){
      ElMessage.error(res.data.message)
      return
    }
    ElMessage.success(res.data.message)
    return res.data
  },
  (err) => {
    // 响应失败
    // 超出 2xx 范围的状态码都会触发该函数。
    // 对响应错误做点什么
    return Promise.reject(err)
  },
)

// 封装请求方法
export default function ajax(config) {
  // url请求传的内容
  const { url = '', method = 'gEt', data = {}, headers = {} } = config
  switch (method.toLowerCase()) {
    case 'get':
      // get请求 参数规程写法放在params
      return request.get(url, { params: data })
    case 'post':
      // post请求 表单数据，对数据进行序列化，格式化
      if (headers['Content-Type'] === 'application/x-www-form-urlencoded') {
        const obj = new URLSearchParams()
        for (const key in data) {
          obj.append(key, data[key])
        }
        return request.post(url, obj, { headers })
      }
      if (headers['Content-Type'] == 'multipart/form-data') {
        // 这是文件数据提交，将json数据序列化，格式化一次
        const obj = new FormData()
        for (const key in data) {
          obj.append(key, data[key])
        }
        return request.post(url, obj, { headers })
      }
      // 普通的json数据
      return request.post(url, data)
    case 'put':
      return request.put(url, data)
    case 'delete':
      return request.delete(url, { data })
    case 'patch':
      // 更新局部资源
      return request.patch(url, data)
    default:
      // 前面匹配都不成立，交给axios自己处理
      return request.request(config)
  }
}
